package 迷宫问题2;

public class MyMaze {
    private static int startPosI;//入口的i下标
    private static int startPosJ;//入口的j下标
    private static int endPosI;//出口的i下标
    private static int endPosJ;//出口的j下标

    //设置迷宫入口的坐标
    public void setStart(int startPosI,int startPosJ){
        MyMaze.startPosI=startPosI;
        MyMaze.startPosJ=startPosJ;

    }

    //设置迷宫出口的坐标
    public void endStart(int endPosI,int endPosJ){
        MyMaze.endPosI=endPosI;
        MyMaze.endPosJ=endPosJ;

    }

    //迷宫搜索通道的算法

    /**
     *
     * @param cell  迷宫地图
     * @param i     入口的i坐标
     * @param j     入口的j坐标
     */
    public  static void visited(int[][] cell,int i,int j){

        cell[i][j]=1;//说明路是通的
        if(i==endPosI&&j==endPosJ){
            System.out.println("找到一条通道：");
            for(int m=0;m<cell.length;m++){
                for(int n=0;n<cell[0].length;n++){
                    if(cell[m][n]==2){//说明是有障碍
                        System.out.print("2\t");
                    }else if(cell[m][n]==1){//说明是通路，可以走
                        System.out.print("*\t");
                    }else {
                        System.out.print("\t");
                    }
                }
                System.out.println();
            }
        }
        //如果整个if都没有找到通路，那么就接下来从上下左右四个方向继续搜索
        //向左边寻找通路
        if(cell[i][j-1]==0){
            visited(cell,i,j-1);
        }
        //向左边寻找通路
        if(cell[i][j+1]==0){
            visited(cell,i,j+1);
        }
        //向上边寻找通路
        if(cell[i-1][j]==0){
            visited(cell,i-1,j);
        }
        //向下边寻找通路
        if(cell[i+1][j]==0){
            visited(cell,i+1,j);
        }
        //上面四个方向都不行，那么我们需要将cell[i][j]置0
        cell[i][j]=0;
    }



    public static void main(String[] args){
        //初始化一个迷宫地图
        int[][] maze={
                {2,2,2,2,2,2,2,2,2},
                {2,0,0,0,0,0,0,0,2},
                {2,0,2,2,0,2,2,0,2},
                {2,0,2,0,0,2,0,0,2},
                {2,0,2,0,2,0,2,0,2},
                {2,0,0,0,0,0,2,0,2},
                {2,2,0,2,2,0,2,2,2},
                {2,0,0,0,0,0,0,0,2},
                {2,2,2,2,2,2,2,2,2}
        };
        MyMaze cell=new MyMaze();
        cell.setStart(1,1);//设置迷宫入口坐标
        cell.endStart(7,7);//设置迷宫出口的坐标
        cell.visited(maze,1,1);//打印迷宫的所有通路
    }
}
